package com.pdd.mall.service;

import com.pdd.mall.dto.BalanceOperationParam;
import com.pdd.mall.dto.UpdatePasswordParam;
import com.pdd.mall.dto.UpdateUserInfoParam;
import com.pdd.mall.dto.UserLoginParam;
import com.pdd.mall.dto.UserRegisterParam;
import com.pdd.mall.entity.User;

import java.math.BigDecimal;

/**
 * 用户服务接口
 */
public interface UserService {

    /**
     * 用户注册
     */
    User register(UserRegisterParam param);

    /**
     * 用户登录
     */
    String login(UserLoginParam param);

    /**
     * 获取用户信息
     */
    User getUserInfo(String username);

    /**
     * 根据用户名获取用户
     */
    User getUserByUsername(String username);

    /**
     * 修改密码
     * @param username 用户名
     * @param param 修改密码参数
     * @return 是否成功
     */
    boolean updatePassword(String username, UpdatePasswordParam param);

    /**
     * 更新用户信息
     * @param username 用户名
     * @param param 更新用户信息参数
     * @return 更新后的用户信息
     */
    User updateUserInfo(String username, UpdateUserInfoParam param);

    /**
     * 获取用户余额
     * @param userId 用户ID
     * @return 用户余额
     */
    BigDecimal getUserBalance(Long userId);

    /**
     * 充值/提现
     * @param userId 用户ID
     * @param param 余额操作参数
     * @return 操作后的余额
     */
    BigDecimal operateBalance(Long userId, BalanceOperationParam param);

    /**
     * 支付订单
     * @param userId 用户ID
     * @param orderNo 订单编号
     * @return 是否支付成功
     */
    boolean payOrder(Long userId, String orderNo);
}
